home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / Hack / UTILS / SETSPASS.ZIP / SETSPASS.C < prev    next >
Text File  |  1992-10-23  |  4KB  |  128 lines

  1. /* setspass.c - set the supervisor password from the NW386 console
  2.    Copyright (c) 1992 MurkWorks, All Rights Reserved
  3.  
  4.    Permission to use, copy, modify, and distribute this 
  5.    software and its documentation for any purpose and without 
  6.    fee is hereby granted, provided that the above copyright
  7.    notice appear on all copies. MurkWorks makes no representations
  8.    about the suitability of this software for any purpose. It is
  9.    provided "as is" without express or implied warranty.
  10.  
  11.    MurkWorks, P.O. Box 631, Potsdam, NY 13676  315-265-4717
  12.  -------------------------------------------------------------
  13.    Title:   setspass
  14.  
  15.    Purpose: Allow the Novell supervisor's password to be set
  16.             from the fileserver console. The user will be required
  17.             to enter the Novell server serial number, which is not
  18.             generally accesible to normal users. 
  19.  
  20.             If the entered serial number matches the server's 
  21.             serial number, the user will be prompted to enter 
  22.             a new supervisor password. 
  23.  
  24.             After the password is entered, the NLM will
  25.             broadcast an announcement to all users indicating that
  26.             the supervisor's password is being changed from the
  27.             console. It will then set the password.
  28. */
  29.  
  30. #include    <stdio.h>
  31. #include    <nwbindry.h>
  32. #include    <nwserial.h>
  33. #include    <nwenvrn.h>
  34. #include    <nwcntask.h>
  35. #include    <string.h>
  36. #include    <conio.h>
  37.  
  38. int
  39. main()        /* don't need argc nor argv in this program */
  40. {
  41.     char    buff[80];
  42.     LONG    serialNumber;
  43.     int    rc;
  44.     WORD    appNumber;
  45.  
  46.     if(GetNetworkSerialNumber( & serialNumber, & appNumber)) {
  47.         perror("GetNetworkSerialNumber");
  48.         return(1);
  49.     }
  50.     /* if we couldn't get the serial number, print an error and
  51.        quit */
  52.  
  53.     printf("This NLM will change the supervisor's password.\n");
  54.     printf("Before changing the password, you must enter this server's\n");
  55.     printf("serial number. This number can be found on the original diskettes\n\n");
  56.  
  57.     while(1) {
  58.         LONG    newSerialNumber;
  59.  
  60.         printf("Enter the server serial number [<Enter> = Quit]:");
  61.  
  62.         if(!fgets(buff,79, stdin) || buff[0] == '\n') {
  63.  
  64.             SetAutoScreenDestructionMode(TRUE);
  65.             return(0);
  66.                     /* quit if error or null line was 
  67.                        entered */
  68.         }
  69.         if(sscanf(buff,"%lx", & newSerialNumber) != 1 ||
  70.            newSerialNumber != serialNumber) {
  71.              printf("The number you entered was incorrect\n");
  72.             continue;
  73.         }
  74.         else
  75.             break;        
  76.     }
  77.  
  78.     while(1) {
  79.         printf("Enter the new supervisor password, it must be at least one character\n");
  80.         printf("and it will echo on the screen\n\n");
  81.         printf("New Supervisor Password:");
  82.     
  83.         if(!fgets(buff,79,stdin) || buff[0] == '\n') {
  84.              printf("You may not set the password to a null value\n");
  85.             return(2);
  86.                 /* quit in case the user entered null
  87.                    just to get out */
  88.         }
  89.     
  90.         clrscr();        /* clear the screen */
  91.     
  92.         buff[strlen(buff) - 1] = 0;        /* chop off trailing newline */
  93.     
  94.         /* the password must be converted to upper case before being
  95.             stored in the bindery. This is because passwords are
  96.            case sensitive, but the NW shell always converts to
  97.            upper case before sending to the server.
  98.         */
  99.         strupr(buff);
  100.         rc = ChangeBinderyObjectPassword("SUPERVISOR", OT_USER, "" , buff);
  101.  
  102.         if(!rc)
  103.             break;
  104.     
  105.         switch(rc) {
  106.             case 0xd7 :
  107.                 printf("Duplicate password entered, enter a new password\n");
  108.                 continue;
  109.             case 0xd8 :
  110.                 printf("Password is not long enough, enter a new password\n");
  111.                 continue;
  112.             default :
  113.                 printf("Unable to change password, unknown error 0x%x\n",rc);
  114.                 return(rc);
  115.         }    /* end switch */
  116.     }    
  117.     /* get here, password was changed ok */
  118.  
  119.     /* send a broadcast to all users, no more than 58 characters though! */
  120.     SendConsoleBroadcast("The supervisor's password has been changed by setspass",
  121.         0, NULL);
  122.  
  123.     printf("The supervisor password has been changed.\n");
  124.     return(0);
  125. }
  126.  
  127.  
  128.